/**
 * 
 */
package com.oolong.account.service;

import java.util.ArrayList;
import java.util.List;

import com.oolong.account.dal.InitemDAO;
import com.oolong.account.dal.IntypeDAO;
import com.oolong.account.dal.data.Initem;
import com.oolong.account.dal.data.Intype;
import com.oolong.account.model.InItemModel;
import com.oolong.account.model.InTypeModel;

/**
 * @author oolong
 * 
 */
public class InManageImp implements InManage {
	InitemDAO initemDAO;
	IntypeDAO intypeDAO;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.oolong.account.service.InManageInterface#add(com.oolong.account.model
	 * .InItem)
	 */
	@Override
	public int add(InItemModel inItem) {
		Initem initemdata = new Initem();
		initemdata.setInTypeId(inItem.getInType().getId());
		initemdata.setMemo(inItem.getMemo());
		initemdata.setMoney(inItem.getMoney());
		initemdata.setUserId(inItem.getUser().getId());
		int inItemID = initemDAO.insert(initemdata);
		return inItemID;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.InManageInterface#delete(long)
	 */
	@Override
	public boolean delete(int id) {
		int result = 0;
		result = initemDAO.deleteByPrimaryKey(id);
		if (result > 0) {
			return true;
		} else
			return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.oolong.account.service.InManageInterface#update(com.oolong.account
	 * .model.InItem)
	 */
	@Override
	public boolean update(InItemModel inItem) {
		int result = 0;
		Initem initemdata = new Initem();
		initemdata.setId(inItem.getId());
		initemdata.setInTypeId(inItem.getInType().getId());
		initemdata.setMemo(inItem.getMemo());
		initemdata.setMoney(inItem.getMoney());
		// initemdata.setUserId(inItem.getUser().getId());
		result = initemDAO.updateByPrimaryKey(initemdata);
		if (result > 0) {
			return true;
		} else
			return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.InManageInterface#query(int)
	 */
	@Override
	public List<InItemModel> query(int user_id) {
		// 因模型层与DAO层的数据内容不一致，因此需要做转换
		// 定义返回模型层的数据
		List<InItemModel> initemmodels = new ArrayList();
		// 实际返回DAO层的数据
		List<Initem> initems = initemDAO.selectBynum(user_id);
		// 遍历DAO层的数据，再设置到模型层的数据上
		for (Initem initem : initems) {
			// 定义一个临时的模型层变量
			InItemModel inItemModel = new InItemModel();
			// 得到DAO层返回数据，并SET给模型层的数据
			inItemModel.setId(initem.getId());
			inItemModel.setMemo(initem.getMemo());
			inItemModel.setDate(initem.getEditTime());
			inItemModel.setMoney(initem.getMoney());
			// 对于模型层中，由于包含收入类型，因此还需要做一层转换
			// 返回收入类型
			InTypeModel intypeModel = new InTypeModel();
			Intype intype = intypeDAO.selectByPrimaryKey(initem.getInTypeId());
			intypeModel.setName(intype.getName());
			intypeModel.setId(intype.getId());
			// 将收入类型赋给模型层的变量
			inItemModel.setInType(intypeModel);
			// 添加到LIST中
			initemmodels.add(inItemModel);
		}
		// 返回LIST
		return initemmodels;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.InManage#querybyID(int)
	 */
	@Override
	public InItemModel querybyID(int id) {
		// 因模型层与DAO层的数据内容不一致，因此需要做转换
		// 实际返回DAO层的数据
		Initem initem = initemDAO.selectByPrimaryKey(id);
		// 遍历DAO层的数据，再设置到模型层的数据上
		InItemModel inItemModel = new InItemModel();
		if (initem != null) {
			// 得到DAO层返回数据，并SET给模型层的数据
			inItemModel.setId(initem.getId());
			inItemModel.setMemo(initem.getMemo());
			inItemModel.setDate(initem.getEditTime());
			inItemModel.setMoney(initem.getMoney());
			// 对于模型层中，由于包含收入类型，因此还需要做一层转换
			// 返回收入类型
			InTypeModel intypeModel = new InTypeModel();
			Intype intype = intypeDAO.selectByPrimaryKey(initem.getInTypeId());
			intypeModel.setName(intype.getName());
			intypeModel.setId(intype.getId());
			// 将收入类型赋给模型层的变量
			inItemModel.setInType(intypeModel);
		} else {
			return null;
		}
		// 返回LIST
		return inItemModel;

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.InManage#querybygroupid(int)
	 */
	@Override
	public List<InTypeModel> querybygroupid(int groupid) {
		// 因模型层与DAO层的数据内容不一致，因此需要做转换
		// 定义返回模型层的数据
		List<InTypeModel> inTypeModels = new ArrayList();
		// 实际返回DAO层的数据
		List<Intype> intypes = intypeDAO.selectAllInSonType(groupid);
		// 遍历DAO层的数据，再设置到模型层的数据上
		for (Intype intype : intypes) {
			// 定义一个临时的模型层变量
			InTypeModel inTypeModel = new InTypeModel();
			// 得到DAO层返回数据，并SET给模型层的数据
			inTypeModel.setId(intype.getId());
			inTypeModel.setName(intype.getName());
			// 添加到LIST中
			inTypeModels.add(inTypeModel);
		}
		// 返回LIST
		return inTypeModels;
	}

	/**
	 * @param intypeDAO
	 *            the intypeDAO to set
	 */
	public void setIntypeDAO(IntypeDAO intypeDAO) {
		this.intypeDAO = intypeDAO;
	}

	/**
	 * @param initemDAO
	 *            the initemDAO to set
	 */
	public void setInitemDAO(InitemDAO initemDAO) {
		this.initemDAO = initemDAO;
	}

}
